class Enquete
  attr_reader :options;
  
  def initialize(*args)
    @options = {};
    @max_str = 0;
    meta = (class << self; self; end);
    args.each do |arg|
      arg = arg.to_sym;
      @options[arg] = 0;
      meta.send(:define_method, arg) {@options[arg]};
      @max_str = arg.to_s.length + 4 if arg.to_s.length > @max_str;
    end
  end
  
  def vota(*args)
    if args.length > 1 && args[1].class != Fixnum
      args.each {|opt| votanum(opt);}
    else
      votaum(*args);
    end
    self
  end
  
  def resultados
    results = "Resultados\n";
    max_str = 0;
    @options.each do |opt, votes|
      results << "#{opt.to_s.center(@max_str)}: #{votes.to_s} votos\n"
    end
    results
  end

  protected
  def votaum(option, vezes=1)
    @options.each do |opt, votes|
      if opt == option.to_sym
        @options[opt] += vezes;
      end
    end
    self    
  end

end

iev = Enquete.new(:marcinha, :rufino, :micox);
iev.vota(:micox).vota(:micox).vota(:rufino).vota(:marcinha);
iev.vota(:rufino, 7);
iev.vota(:micox, :rufino, :marcinha);
puts "devolve: mah->2, ruf->9, mico->3 ";
puts iev.micox.to_s